var canvas = document.getElementById("canvas1");
var context1 = canvas.getContext("2d");

//Global Variables
var gameover = false; 				//gameoverの時frame変更終わり 
var showMenuFlag = true;			//最初menuを見せる。
var gameStartFlag = false;			//startボータンを押した時trueになる。
var gameDrawFlag = false;			//ゲームのinitが終わるとtrueになる。

//Screen　Variables
var gameScreenWidth = 500;
var gameScreenHeight = 600;

//Menu Variables
var numbers = new Array();			//何人でプレーイやるかを決めるためのobject array
var selectedNumber = -1;			
var check;							//選択された番号をcheckするための変数
var startBtn;						//start button object

//Create StartNode
var startNodes = new Array();		//出発nodeのobject array
var numberOfNode = 5;				//出発nodeの数(何人のplayer)
var numberOfCP = 10;				//最大いくつの横線を描くかを決める

var vLines = new Array();			//縦線のobject array
var cp = new Array();				//横線と縦線の接点array

var cursors = new Array();			//移動するcursorのarray

//Mouse Control Variable
var mPos = new Point(0, 0);				//Mouse's Position
var mClickedPos = new Point(0, 0);		//Position that the mouse clicked
var mClickedMapPos = new Point(0, 0);	//Map position of Clicked Position
var selectedNode = -1;					//選択されたstart nodeを示す。



//接点の初期化
function InitCP()
{
	for(var i = 0; i < numberOfNode; i++)
	{
		cp[i] = new Array(numberOfCP);
	}
	for(var x = 0; x < numberOfNode; x++)
	{
		for(var y = 0; y < numberOfCP; y++)
		{
			cp[x][y] = new CrossPoint(x, y, y);
			cp[x][y].SetPosition(x, y);
		}
	}
}

//start nodeとの縦線の初期化
function InitNode()
{
	for(var i = 0; i < numberOfNode; i++)
	{
		startNodes[i] = new GameObject(i * 100 + 10, 20, "./Image/snode0" + i + ".png" , i, 90, 90);
		vLines[i] = new Line(startNodes[i]);		
	}	
}

//cusorの初期化
function InitCursor()
{
	for(var i = 0; i < numberOfNode; i++)
	{
		cursors[i] = new Cursor(cp[i][0].pos.X, cp[i][0].pos.Y, 10, "#FF0000");
	}
}



//各objectを描く
function DrawObjects()
{
	context1.clearRect(0, 0, 510, 600);
	context1.fillStyle = "rgb(50, 200, 50)";
	context1.fillRect(0, 0, gameScreenWidth, gameScreenHeight);
	
	MouseControl();
		
	if(showMenuFlag)
	{
		ShowStartMenu();	//最初はmenu画面が見える。
	}
	
	if(gameDrawFlag)
	{
		StartGame();		//menuからstartボータンを押すとゲームが始まる。
	}
	
	//DisplayDebugMessage();
}

//各nodeと縦線を描く。
function DrawNode()
{
	for(var i = 0; i < numberOfNode; i++)
	{
		context1.drawImage(startNodes[i].image,
		 					startNodes[i].position.X, 
		 					startNodes[i].position.Y,
		 					startNodes[i].width,
		 					startNodes[i].height);
		vLines[i].DrawVLine(); 				//Draw Vertial Lines		
		
	}
}
//接点を描く。
function DrawCP()
{
	for(var x = 0; x < numberOfNode; x++)
	{
		for(var y = 0; y < numberOfCP; y++)
		{	
			context1.beginPath();
			context1.arc(vLines[x].startPos.X, 20 + vLines[x].startPos.Y + vLines[x].vLength / 10 * y, 5, 2 * Math.PI, false);	 
			context1.fillStyle="#8ED6FF";
			context1.fill();
			context1.lineWidth=2;
			context1.strokeStyle="black"; 
			context1.stroke();
			
		}
	}
}

//各横線を描く。
function DrawHLine()
{
	for(var x = 0; x < numberOfNode - 1; x++)
	{
		for(var y = 0; y < numberOfCP; y++)
		{
			if(cp[x][y].start == true)
			{
				context1.beginPath();
				context1.moveTo(cp[x][y].pos.X, cp[x][y].pos.Y);
				context1.lineTo(cp[x + 1][y].pos.X, cp[x + 1][y].pos.Y);
				context1.lineWidth = 1;
	 			context1.stroke();				
			}
		}
	}	
}

//ランダムで横線を生成、各接点のstart,endを決定。
function SetCP()	
{
	for(x = 0; x < numberOfNode - 1; x++)
	{
		for(y = 0; y < numberOfCP; y++)
		{
			if(cp[x][y].end != true)
				cp[x][y].s = Math.floor(Math.random() * 2);
				
			if(cp[x][y].s == 1)
			{
				cp[x][y].start = true;
				cp[x+1][y].end = true;
			}
			else
			{
				cp[x][y].start = false;
				cp[x+1][y].end = false;
			}
		}
	}	
}

//startボータンを押した時始まる。
function StartGame()
{
	DrawNode(); 				//start nodeを描く
	DrawHLine();				//横線を描く
	DrawCP();					//接点を描く
	
	if(selectedNode != -1)
	{
		cursors[selectedNode].DrawCursor();		//cursorを描く
		cursors[selectedNode].MoveCursor();		//新しいpositionにcusorを描きなおす。
	}
	
}

function InitStartMenu()
{
	for(var i = 0; i < 4; i++)
	{
		numbers[i] = new GameObject(i * 100 + 50, 200, "./Image/0" + i + ".png", 2 + i, 100, 100);		
	}
	
	check = new GameObject(0, 0, "./Image/check.png", 0, 100, 100);
	startBtn = new GameObject(150, 400, "./Image/start.png", 0, 200, 50);
}

function ShowStartMenu()
{
	context1.fillStyle    = '#00f';
    context1.font         = '40px ＭＳ ゴシック';
    context1.textBaseline = 'top';
	context1.fillText("何人でゲームをやりますか", 10, gameScreenHeight / 5);
	
	for(var i = 0; i < 4; i++)
	{
		context1.drawImage(numbers[i].image,
		 					numbers[i].position.X, 
		 					numbers[i].position.Y,
		 					numbers[i].width,
		 					numbers[i].height);
	}
	
	if(selectedNumber != -1)
	{
		context1.drawImage(check.image,
							check.position.X,
							check.position.Y,
							check.width,
							check.height);
							
		context1.drawImage(startBtn.image,
							startBtn.position.X,
							startBtn.position.Y,
							startBtn.width,
							startBtn.height);				
	}
}

function CheckGameover()
{
	var cnt;
	for(var i = 0; i < numberOfNode; i++)
	{
		if(cursors[i].gameover == true)
		{
			cnt++;
			if(cnt >= numberOfNode)
				gameover = true;
		}
	}
}


InitStartMenu();

function InitGame()
{
	if(gameStartFlag)
	{
		numberOfNode = selectedNumber;		
		InitNode();
		InitCP();
		SetCP();
		InitCursor();
		gameDrawFlag = true;
	}
}


if(!gameover)
{
	setInterval(DrawObjects, 10);
}